// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: HTZ Setup Object
// Script Author: Christan Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------

//-------Aliases-------//
private alias 40 : TYPE_HTZSETUP

// Function declarations
reserve function HTZSetup_Function97
reserve function HTZSetup_Function98

// Static Values
public value HTZSetup_value33 = 0;
public value HTZSetup_value34 = 0;
public value HTZSetup_value35 = 0;
public value HTZSetup_value36 = 0;
public value HTZSetup_value37 = 0;
public value HTZSetup_value38 = 0;

// Tables
public table HTZSetup_table39
	508, 24, 509, 10, 510, 12, 511, 24, 510, 12, 509, 10
end table

public table HTZSetup_table40
	512, 128, 513, 20, 512, 8, 513, 8, 512, 8, 513, 8
end table

public table HTZSetup_table41
	514, 128, 515, 12, 514, 12, 515, 12, 514, 6, 515, 6, 514, 6, 515, 6
	
end table

public table HTZSetup_table42
	516, 8, 517, 8
end table

public table HTZSetup_table43
	518, 128, 519, 8, 518, 8, 519, 8, 518, 8, 519, 12, 518, 12, 519, 12
	
end table

public table HTZSetup_table38
	0xE00000, 0xE06000, 0xE0A000, 0xE0E000, 0xE0E000, 0xE00000, 0xE06000, 0xE0A000, 0xE0C020, 0xE0E000, 0xE00000, 0xE06000, 0xE06000, 0xE0E040, 0xE0E080, 0xE02000
	0xE04000, 0xE08000, 0xE0E060, 0xE0E0A0, 0xE0E080, 0xE02000, 0xE06000, 0xE0E040, 0xE0C020, 0xE0E000, 0xE00000, 0xE06000, 0xE06000, 0xE0C020, 0xE0E000, 0xE00000
	0xE00000, 0xE06000, 0xE0A000, 0xE0E000, 0xE0C000, 0xC00000, 0xE04000, 0xE08000, 0xE06000, 0xC0A000, 0xA00000, 0xE02000, 0xC00000, 0xC04000, 0xE08000, 0x800000
	0xA00000, 0xE02000, 0xE06000, 0xC0A000, 0xE0C000, 0xC00000, 0xE04000, 0xE08000, 0xE0A000, 0xE0E000, 0xE00000, 0xE06000, 0xE06000, 0xE0A000, 0xE0E000, 0xE00000
end table

function HTZSetup_Function97
	CheckEqual(object[25].type, TypeName[Music Event])
	temp0 = checkResult
	CheckEqual(object[25].propertyValue, 2)
	temp0 &= checkResult
	CheckEqual(stage.musicFlag, 0)
	temp0 &= checkResult
	if temp0 == 0
		switch music.currentTrack
		case 0
			SetMusicTrack("Invincibility_F.ogg", 2, 0x78B1)
			SwapMusicTrack("HillTop_F.ogg", 0, 1, 0x1F40)
			break
		case 2
			SetMusicTrack("HillTop_F.ogg", 0, 1)
			SwapMusicTrack("Invincibility_F.ogg", 2, 0x78B1, 0x1F40)
			break
		case 4
		case 6
		case 7
			SetMusicTrack("HillTop_F.ogg", 0, 1)
			SetMusicTrack("Invincibility_F.ogg", 2, 0x78B1)
			break
		end switch
	else
		stage.musicFlag = 1
	end if
end function


function HTZSetup_Function98
	CheckEqual(object[25].type, TypeName[Music Event])
	temp0 = checkResult
	CheckEqual(object[25].propertyValue, 2)
	temp0 &= checkResult
	CheckEqual(stage.musicFlag, 0)
	temp0 &= checkResult
	if temp0 == 0
		switch music.currentTrack
		case 0
			SetMusicTrack("Invincibility.ogg", 2, 0x9717)
			SwapMusicTrack("HillTop.ogg", 0, 1, 0x30D4)
			break
		case 2
			SetMusicTrack("HillTop.ogg", 0, 1)
			SwapMusicTrack("Invincibility.ogg", 2, 0x9717, 0x30D4)
			break
		case 4
		case 6
		case 7
			SetMusicTrack("HillTop.ogg", 0, 1)
			SetMusicTrack("Invincibility.ogg", 2, 0x9717)
			break
		end switch
	else
		stage.musicFlag = 2
	end if
end function


event ObjectMain
	object.value1++
	if object.value1 == 12
		object.value1 = 0
		object.value15 += 4
		object.value15 &= 63
		GetTableValue(temp0, object.value15, HTZSetup_table38)
		SetPaletteEntry(0, 147, temp0)
		object.value16 += 4
		object.value16 &= 63
		GetTableValue(temp0, object.value16, HTZSetup_table38)
		SetPaletteEntry(0, 148, temp0)
		object.value17 += 4
		object.value17 &= 63
		GetTableValue(temp0, object.value17, HTZSetup_table38)
		SetPaletteEntry(0, 158, temp0)
		object.value18 += 4
		object.value18 &= 63
		GetTableValue(temp0, object.value18, HTZSetup_table38)
		SetPaletteEntry(0, 159, temp0)
	end if
	if object.value5 < 2
		GetTableValue(temp0, object.value6, HTZSetup_table39)
		Copy16x16Tile(761, temp0)
		temp0 += 12
		Copy16x16Tile(762, temp0)
		temp0 += 4
		Copy16x16Tile(763, temp0)
		object.value6++
		GetTableValue(object.value5, object.value6, HTZSetup_table39)
		object.value6++
		object.value6 %= 12
	else
		object.value5--
	end if
	if object.value7 < 2
		GetTableValue(temp0, object.value8, HTZSetup_table40)
		Copy16x16Tile(764, temp0)
		object.value8++
		GetTableValue(object.value7, object.value8, HTZSetup_table40)
		object.value8++
		object.value8 %= 12
	else
		object.value7--
	end if
	if object.value9 < 2
		GetTableValue(temp0, object.value10, HTZSetup_table41)
		Copy16x16Tile(765, temp0)
		object.value10++
		GetTableValue(object.value9, object.value10, HTZSetup_table41)
		object.value10++
		object.value10 &= 15
	else
		object.value9--
	end if
	if object.value11 < 2
		GetTableValue(temp0, object.value12, HTZSetup_table42)
		Copy16x16Tile(766, temp0)
		object.value12++
		GetTableValue(object.value11, object.value12, HTZSetup_table42)
		object.value12++
		object.value12 &= 3
	else
		object.value11--
	end if
	if object.value13 < 2
		GetTableValue(temp0, object.value14, HTZSetup_table43)
		Copy16x16Tile(767, temp0)
		object.value14++
		GetTableValue(object.value13, object.value14, HTZSetup_table43)
		object.value14++
		object.value14 &= 15
	else
		object.value13--
	end if
	foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
		temp1 = object[currentPlayer].xpos
		temp1 >>= 16
		temp2 = object[currentPlayer].ypos
		temp2 >>= 16
		temp2 += 4
		Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEB)
		temp0 &= 1
		if temp0 == 1
			CallFunction(PlayerObject_FireHit)
		end if
	next
	if HTZSetup_value33 >= 1
		if object.value25 == 0
			if HTZSetup_value34 < 2
				stage.midPoint = 2
				stage[0].activeLayer = 9
				stage[1].activeLayer = 0
				stage[2].activeLayer = 3
				stage[3].activeLayer = 0
			else
				stage.midPoint = 2
				stage[0].activeLayer = 9
				stage[1].activeLayer = 0
				stage[2].activeLayer = 4
				stage[3].activeLayer = 0
			end if
			object.value25 = 1
			if HTZSetup_value34 != object.value26
				object.value23 = HTZSetup_value35
				HTZSetup_value36 = 0
				tileLayer[3].scrollPos = object.value23
				tileLayer[4].scrollPos = object.value23
				object.value26 = HTZSetup_value34
			end if
		end if
		if HTZSetup_value33 > 1
			if object.value21 > 0
				object.value21--
			else
				object.value19++
				object.value19 %= 40
				if object.value19 == 8
					PlaySfx(SfxName[Rumble], 0)
				end if
				temp0 = object.value19
				temp0 &= 7
				if temp0 == 0
					screen.shakeX = 1
				end if
				temp0 = object.value19
				temp0 &= 3
				if temp0 == 0
					screen.shakeY = 2
				end if
				if object.value22 == 0
					switch HTZSetup_value38
						case 3
							object.value23 += 0x8000
							break
						default
							object.value23 += 0x4000
							break
					end switch
					if object.value23 == HTZSetup_value37
						object.value22 = 1
						object.value21 = 120
					end if
				else
					switch HTZSetup_value38
						case 3
							object.value23 -= 0x8000
							break
						default
							object.value23 -= 0x4000
							break
					end switch
					if object.value23 == HTZSetup_value35
						object.value22 = 0
						object.value21 = 120
					end if
				end if
				tileLayer[3].scrollPos = object.value23
				tileLayer[4].scrollPos = object.value23
				HTZSetup_value36 = object.value23
				HTZSetup_value36 -= HTZSetup_value35
				HTZSetup_value36 >>= 16
			end if
		end if
		if object[0].type != TypeName[Debug Mode]
			HTZSetup_value33 = 0
		else
			object.value25 = 0
		end if
	else
		if object.value25 != 0
			object.value23 = HTZSetup_value35
			HTZSetup_value36 = 0
			tileLayer[3].scrollPos = object.value23
			tileLayer[4].scrollPos = object.value23
			stage.midPoint = 3
			stage[0].activeLayer = 1
			stage[1].activeLayer = 2
			stage[2].activeLayer = 0
			stage[3].activeLayer = 0
			object.value19 = 0
			object.value20 = 0
			object.value21 = 0
			object.value22 = 0
			object.value25 = 0
		end if
	end if
end event


event ObjectStartup
	SetMusicTrack("HillTop.ogg", 0, 1)
	SpeedUpMusic = HTZSetup_Function97
	SlowDownMusic = HTZSetup_Function98
	SetPaletteEntry(0, 192, 0)
	animalType1 = TypeName[Locky]
	animalType2 = TypeName[Wocky]
	tileLayer[1].scrollPos = -0x40000
	tileLayer[2].scrollPos = -0x40000
	object[10].type = TypeName[HTZ Setup]
	object[10].priority = PRIORITY_ACTIVE
	object[10].value15 = 0
	object[10].value16 = 1
	object[10].value17 = 2
	object[10].value18 = 3
	switch stage.actNum
		case 0
		case 1
			SetTileLayerEntry(289, 0, 0, 8)
			SetTileLayerEntry(291, 0, 13, 8)
			object[464].xpos -= 0x2 0000
			//LoadPalette("HTZAct1Pal.act", 0, 128, 128, 256)
			break
		case 2
			ResetObjectEntity(181, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(182, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(183, TypeName[Blank Object], 0, 0, 0)
			SetTileLayerEntry(290, 0, 85, 12)
			SetTileLayerEntry(290, 0, 86, 12)
			SetTileLayerEntry(289, 0, 87, 11)
			SetTileLayerEntry(289, 0, 88, 10)
			SetTileLayerEntry(289, 0, 97, 10)
			LoadPalette("HTZAct2Pal.act", 0, 128, 128, 256)
			break
	end switch
end event

event RSDKDraw
	DrawSprite(0)
end event

event RSDKLoad
	LoadSpriteSheet("Global/Display.gif")
	SpriteFrame(-16, -16, 32, 32, 1, 143)
end event
